This invention relates to programmable logic devices, and more particularly, to programmable logic devices with differential communications circuitry that can be used during device programming, testing, and normal in-system operation.
Programmable logic devices are a type of integrated circuit that can be programmed by a user to implement a desired custom logic function. In a typical scenario, a logic designer uses computer-aided design (CAD) tools to design a custom logic circuit. The CAD tools help the designer implement the custom logic circuit using available programmable logic device resources. The CAD tools generate configuration data. When the configuration data is loaded into a programmable logic device, the programmable logic device performs the functions of the custom logic circuit.
Programmable logic devices are typically programmed and tested using procedures that are compliant with JTAG (Joint Test Action Group) standards promulgated by the Institute of Electrical and Electronics Engineers (IEEE). Programmable logic devices have JTAG ports that are connected to 10-pin JTAG connectors on system boards. A JTAG cable can be connected between JTAG-compliant equipment and the JTAG connector. This type of arrangement may be used to load configuration data on a programmable logic device and may be used to perform boundary scan testing. The JTAG port may also be used to support other functions such as manufacturing diagnostics and real-time design diagnostics.
Although use of the JTAG standard to support these types of operations has become widespread, the JTAG standard is not as robust as other standards and supports only relatively low data rates. Moreover, JTAG ports are generally not used once a programmable logic device is operating normally in a system. Normal system use, which is sometimes referred to as “user mode” operation, relies on other types of ports and does not involve JTAG communications. As a result, the JTAG 10-pin connector and the JTAG circuitry on JTAG-compliant programmable logic devices represent undesirable system overhead.
What is therefore needed is a way to support programming, testing, and user mode operations more effectively.